package bsh;

import org.junit.Test;

import java.lang.ref.WeakReference;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

public class InterpreterTest {


	/**
	 * <a href="http://code.google.com/p/beanshell2/issues/detail?id=50">Issue #50</a>
	 */
	@Test(timeout = 10000)
	public void check_for_memory_leak() throws Exception {
		final WeakReference<Object> reference = new WeakReference<Object>(new Interpreter().eval("x = new byte[1024 * 2024]; return x;"));
		while (reference.get() != null) {
			System.gc();
			Thread.sleep(100);
		}
	}

	@Test
	public void check_system_object() throws Exception {
		TestUtil.eval("bsh.system.foo = \"test\";");
		final Object result = TestUtil.eval("return bsh.system.foo;");
		assertEquals("test", result);
		assertNull(TestUtil.eval("return bsh.system.shutdownOnExit;"));
		Interpreter.setShutdownOnExit(false);
		assertEquals(Boolean.FALSE, TestUtil.eval("return bsh.system.shutdownOnExit;"));
	}

}
